//引用mongoose
const mongoose = require('mongoose');
//useNewUrlParser 这个 属性会在url里面识别验证用户所需的db,未升级前是不需要指定的,升级到一定要指定.
//连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/yang', { useNewUrlParser: true }, (err) => {

    if (err) {
        console.log(err);
        return;
    }

    console.log("连接成功")
});
//创建获取 Schema
var UserSchema = mongoose.Schema({
    name: String,
    // name: {
    //     type: String,
    //     trim: true, //mongoose模式修饰符  可以将name中的字符串两边的空格清除
    //     lowercase: true,
    //     uppercase: true,
    //     set(parmas) { //增加数据的时候对name字段进行处理
    //         //parmas可以获取name的值  返回的数据就是name在数据库实际保存的值
    //         return "123" + parmas;
    //     },
    //     get(parmas) { //从数据库获取的时候进行处理
    //         //通过user.name这种获取方式会触发get方法 
    //     },
    //     sn: { //设备号  建立索引  可以通过findBySn()方法查找
    //         type: String,
    //         index: true, //设置索引

    //     },
    //     //对数据进行校验
    //     require: true, //数据比如传入
    //     //只能用在Number类型中
    //     max: 20, //数据最大值
    //     min: 0, //数据最小值
    //     enum: [0, 1, 2], //可能的值  枚举
    //     match: /^sn(.*)/, //正则表达式  进行匹配
    //     maxlength: 20, //最大长度
    //     minlength: 10, //最小长度
    //     validate: function(sn) {
    //         return true; //验证通过
    //         return false; //验证未通过
    //     }
    // },
    age: {
        type: Number, //指定数据类型
        default: 0 //可以指定默认数据
    }
});

//获取Model
var User = mongoose.model('User', UserSchema, 'users');



////由model添加
// var person = new User({
//     name: "小帅帅",
//     age: '31'
// })

// person.save(function(err){
//     if(err){
//         console.log(err);
//         return;
//     }
//     console.log("保存成功");
// });


//model查找
User.find({}, function(err, doc) {
    if (err) {
        console.log(err);
        return;
    }

    console.log(doc);
});

////model 更新
// User.updateOne({ age: 31 }, { name: "xiaoxiao", age: 18 }, (err, doc) => {
//     if (err) {
//         console.log(err);
//         return;
//     }

//     console.log(doc);
// });

//删除
// User.deleteMany({ age: 18 }, (err, doc) => {
//     if (err) {
//         console.log(err);
//         return;
//     }

//     console.log(doc);
// });


//扩展的静态方法
// UserSchema.statics.findBySn = function(sn, cb) {
//     this.find({ "sn": sn }, function(err, docs) {
//         cb(err, docs);
//     })
// }

//实际调用
// UserModel.findBySn('123456', function(err, docs) {
//     if (err) {
//         console.log(err);
//         return;
//     }

//     console.log(docs);
// })


//实例方法定义
// UserSchema.methods.print=function(){
//     console.log('我是个实例方法');
//     console.log(this)
// }
//调用方法
// User.print()